/*
 * app.h
 *
 */

#ifndef INC_APP_H_
#define INC_APP_H_

/**
 * includes
 *
 */
#include "main.h"
#include "utils.h"
#include <stdbool.h>
#include <stdint.h>
#include <math.h>
#include <limits.h>

/**
 * defines
 *
 */
#define KEY_FNC					!HAL_GPIO_ReadPin(FNC_GPIO_Port, FNC_Pin)
#define KEY_DOWN				!HAL_GPIO_ReadPin(DOWN_GPIO_Port, DOWN_Pin)
#define KEY_UP					!HAL_GPIO_ReadPin(UP_GPIO_Port, UP_Pin)
#define KEY_ENT					!HAL_GPIO_ReadPin(ENT_GPIO_Port, ENT_Pin)

#define LED_RUN(PinState)		HAL_GPIO_WritePin(RUN_GPIO_Port, RUN_Pin, !PinState)
#define LED_COM(PinState)		HAL_GPIO_WritePin(COM_GPIO_Port, COM_Pin, !PinState)
#define LED_ERR(PinState)		HAL_GPIO_WritePin(ERR_GPIO_Port, ERR_Pin, !PinState)

#define I00						!HAL_GPIO_ReadPin(I00_GPIO_Port, I00_Pin)
#define I01						!HAL_GPIO_ReadPin(I01_GPIO_Port, I01_Pin)

#define Q00(PinState)			HAL_GPIO_WritePin(Q00_GPIO_Port, Q00_Pin, !PinState)
#define Q01(PinState)			HAL_GPIO_WritePin(Q01_GPIO_Port, Q01_Pin, !PinState)

#define VERSION  				101

/**
 * externs
 *
 */
extern bool coil[32];
extern bool discreteInput[32];
extern uint16_t holdingRegister[32];
extern uint16_t inputRegister[32];
extern const uint16_t file[512];

/**
 * functions
 *
 */
void setup(void);
void loop(void);
void task1ms(void);

#endif
